ウィジェットを探す
テスト環境でウィジェットを見つけるには、Finder
クラス。自分で書くことも可能ですが、Finder
クラス、
一般に、ツールを使用してウィジェットを見つける方が便利です
によって提供されるflutter_test
パッケージ。
中にflutter run
ウィジェット テストのセッションでは、次のこともできます
Flutter ツールの画面の一部を対話的にタップすると、
提案されたものを印刷するFinder
。
このレシピで見ているのは、find
によって提供される定数
のflutter_test
パッケージを作成し、その方法を示します
の一部と協力するFinders
それは提供します。
利用可能なファインダーの完全なリストについては、
を参照してくださいCommonFinders
ドキュメンテーション。
ウィジェットのテストとその役割に慣れていない場合は、Finder
クラス、
を見直すウィジェットのテストの概要レシピ。
このレシピでは次の手順を使用します。
- を見つける
Text
ウィジェット。 - 特定のウィジェットを見つける
Key
。 - 特定のウィジェット インスタンスを見つけます。
Text
ウィジェット
1. を見つけますテストでは、多くの場合、特定のテキストを含むウィジェットを検索する必要があります。
これはまさに、0cb36aa0-e540-4285-a7e5-66bf68b7386dのメソッドです。それは、Finder
特定のウィジェットを表示するウィジェットを検索しますString
テキストの。
testWidgets('finds a Text widget', (tester) async {
// Build an App with a Text widget that displays the letter 'H'.
await tester.pumpWidget(const MaterialApp(
home: Scaffold(
body: Text('H'),
),
));
// Find a widget that displays the letter 'H'.
expect(find.text('H'), findsOneWidget);
});
Key
2. 特定のウィジェットを見つける場合によっては、以前に作成されたキーに基づいてウィジェットを見つけたい場合があります。
それに提供されます。これは、
同じウィジェット。たとえば、ListView
複数表示される場合がありますText
同じテキストを含むウィジェット。
この場合、Key
リスト内の各ウィジェットに。これにより、
特定のウィジェットを一意に識別し、見つけやすくするアプリ
テスト環境のウィジェット。
testWidgets('finds a widget using a Key', (tester) async {
// Define the test key.
const testKey = Key('K');
// Build a MaterialApp with the testKey.
await tester.pumpWidget(MaterialApp(key: testKey, home: Container()));
// Find the MaterialApp widget using the testKey.
expect(find.byKey(testKey), findsOneWidget);
});
3. 特定のウィジェット インスタンスを見つける
最後に、ウィジェットの特定のインスタンスを見つけることに興味があるかもしれません。
たとえば、これは、child
プロパティをレンダリングしていることを確認したい場合は、child
ウィジェット。
testWidgets('finds a specific instance', (tester) async {
const childWidget = Padding(padding: EdgeInsets.zero);
// Provide the childWidget to the Container.
await tester.pumpWidget(Container(child: childWidget));
// Search for the childWidget in the tree and verify it exists.
expect(find.byWidget(childWidget), findsOneWidget);
});
まとめ
のfind
によって提供される定数flutter_test
パッケージが提供する
テスト環境でウィジェットを見つける方法はいくつかあります。このレシピ
これらの方法のうち 3 つを実証しましたが、さらにいくつかの方法が存在します
さまざまな目的のために。
上記の例が特定のユースケースで機能しない場合は、
を見てくださいCommonFinders
ドキュメンテーション利用可能なすべての方法を確認します。
完全な例
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('finds a Text widget', (tester) async {
// Build an App with a Text widget that displays the letter 'H'.
await tester.pumpWidget(const MaterialApp(
home: Scaffold(
body: Text('H'),
),
));
// Find a widget that displays the letter 'H'.
expect(find.text('H'), findsOneWidget);
});
testWidgets('finds a widget using a Key', (tester) async {
// Define the test key.
const testKey = Key('K');
// Build a MaterialApp with the testKey.
await tester.pumpWidget(MaterialApp(key: testKey, home: Container()));
// Find the MaterialApp widget using the testKey.
expect(find.byKey(testKey), findsOneWidget);
});
testWidgets('finds a specific instance', (tester) async {
const childWidget = Padding(padding: EdgeInsets.zero);
// Provide the childWidget to the Container.
await tester.pumpWidget(Container(child: childWidget));
// Search for the childWidget in the tree and verify it exists.
expect(find.byWidget(childWidget), findsOneWidget);
});
}